#ifndef SINCRONIZADOR_H_
#define SINCRONIZADOR_H_

#include <arpa/inet.h>
#include <ctype.h>
#include <dirent.h>
#include <fcntl.h>
#include <iostream>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <vector>
#include "HashArchivo.h"

#if INSTALANDO
#define SINCRONIZADOR_DATA_PATH PATH_RESOURCES
#else
#define SINCRONIZADOR_DATA_PATH "../Resources/"
#endif

using namespace std;

class Sincronizador {
public:
    int ServidorExponerCarpeta( int cliente, string path );
    int ClienteSincronizarConServidor( int server, string path );
    HashArchivo hasher;
	void delete_sync_folder( string path );

private:
    void gen_sync_list( vector<string> * list, string path );
    string get_file_last_mod( string filename );
    string get_file_size( string filename );
    string get_line( int sock );
    vector<string> split(const string &s, char delim);
    vector<string> &split(const string &s, char delim, vector<string> &elems);
    int dir_exists( string path );
    int file_exists( string filename );
    void cat( int client, string filename );
    void copy( string destination, string source );
    string get_message( int sock );
    void send_message( int sock, string message );
    void replicate_file( int server, string filename, string localfilename, string size, string hash );
};

#endif /* SINCRONIZADOR_H_ */
